package cn.edu.xjtu.work.MinStack;

import java.util.Stack;

/**
 * 155. 最小栈
 * 
 * 设计一个支持 push ，pop ，top 操作，并能在常数时间内检索到最小元素的栈。
 * 
 * push(x) —— 将元素 x 推入栈中。
 * 
 * pop() —— 删除栈顶的元素。
 * 
 * top() —— 获取栈顶元素。
 * 
 * getMin() —— 检索栈中的最小元素。
 */
public class MinStack {
	Stack<Integer> data = null;
	Stack<Integer> min = null;

	/** initialize your data structure here. */
	public MinStack() {
		data = new Stack<>();
		min = new Stack<>();
	}

	public void push(int val) {
		data.push(val);
		// 如果当前值比最小栈顶端值小的话就把当前值插入,否则继续插入最小栈顶部的值
		min.push(val < min.peek() ? val : min.peek());
	}

	public void pop() {
		data.pop();
		min.pop();
	}

	public int top() {
		return data.peek();
	}

	public int getMin() {
		return min.peek();
	}
}
